package com.kun.companion.core.aop;

import java.lang.reflect.Method;

/**
 * AOP拦截器接口
 *
 * @author gzc
 */
public interface BeanInterceptor {
    /**
     * 方法执行前拦截
     *
     * @param method 目标方法
     * @param args   方法参数
     * @return 是否继续执行后续逻辑
     */
    default boolean before(Method method, Object[] args) {
        return true;
    }

    /**
     * 方法执行后拦截
     *
     * @param method 目标方法
     * @param result 方法返回值
     * @return Object
     */
    default Object after(Method method, Object result) {
        return result;
    }

    /**
     * 异常处理
     *
     * @param method 目标方法
     * @param e      异常对象
     */
    default void onException(Method method, Throwable e) {
    }

    /**
     * 获取拦截器执行顺序
     *
     * @return 排序
     */
    default int getOrder() {
        return 0;
    }
}